package guoanmaker.operator.business.controller;

import java.util.Date;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.aliyun.oss.OSSClient;

import guoanmaker.operator.business.service.OperatorContractServiceInterface;
import guoanmaker.operator.helper.common.AjaxJson;
import guoanmaker.operator.helper.common.abstractobj.ApiController;
import guoanmaker.operator.helper.common.util.OSSUnitHelper;
import io.swagger.annotations.ApiOperation;

/**
 * 
* @ClassName: OperatorContractController 
* @Description: TODO(合同控制类和 办公指南) 
* @author (ZhangXinYu)  
* @date 2017年12月14日 下午4:31:40 
* @version V1.0
 */
@RestController
@RequestMapping(ApiController.CONTRACT_URL)
public class OperatorContractController {
	@Autowired
	private OperatorContractServiceInterface operatorContractService;
	
	/**
	 * 
	* @Title: putImg 
	* @Description: TODO(合同封面上传) 
	* @param @param contractlogo
	* @param @param response
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 上午11:39:37 
	* @version V1.0
	 */
	@SuppressWarnings("unused")
	@ApiOperation(value="上传合同图片",notes="合同图片上传")
	@PostMapping("/putContractImg")
	public AjaxJson putImg(MultipartFile contractlogo , HttpServletResponse response){
		AjaxJson ajaxJson=new AjaxJson();
		if(contractlogo!=null){
			OSSUnitHelper ossunit=new OSSUnitHelper();
			OSSClient client=OSSUnitHelper.getOSSClient();
			String diskName = "datas/contractImg/";
			String fileName = new Date().getTime() + (int) ((Math.random() * 9 + 1) * 100000)
					+ contractlogo.getOriginalFilename().substring(contractlogo.getOriginalFilename().indexOf("."));
	        String md5key = OSSUnitHelper.uploadObject2OSS(client, contractlogo, diskName,fileName);
	        String url="";
	        url=OSSUnitHelper.getUrl(client, diskName, fileName);
	        String urll=    url.substring(4, url.length());
	        url="https"+urll;
	        System.out.println(url+"5");
	        if(url!=null&&!url.equals("")){
	        	ajaxJson.setSuccess(true).setStatus(200).setData(url);
	        	response.setContentType(url);
	        } 
		 }
		 return ajaxJson;
	}
	
	/**
	 * 
	* @Title: putFile 
	* @Description: TODO(合同文件上传) 
	* @param @param contractlogo
	* @param @param response
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 上午11:39:58 
	* @version V1.0
	 */
	@SuppressWarnings("unused")
	@ApiOperation(value="上传合同文件",notes="合同文件上传")
	@PostMapping("/putContractFile")
	public AjaxJson putFile(MultipartFile contractlogo , HttpServletResponse response){
		AjaxJson ajaxJson=new AjaxJson();
		if(contractlogo!=null){
			OSSUnitHelper ossunit=new OSSUnitHelper();
			OSSClient client=OSSUnitHelper.getOSSClient();
			String diskName = "datas/contractFile/";
			String fileName = new Date().getTime() + (int) ((Math.random() * 9 + 1) * 100000)
					+ contractlogo.getOriginalFilename().substring(contractlogo.getOriginalFilename().indexOf("."));
	        String md5key = OSSUnitHelper.uploadObject2OSS(client, contractlogo, diskName,fileName);
	        String url="";
	        url=OSSUnitHelper.getUrl(client, diskName, fileName);
	        String urll=    url.substring(4, url.length());
	        url="https"+urll;
	        System.out.println(url+"5");
	        if(url!=null&&!url.equals("")){
	        	ajaxJson.setSuccess(true).setStatus(200).setData(url);
	        	response.setContentType(url);
	        } 
		 }
		 return ajaxJson;
	}
	
	/**
	 * 
	* @Title: addContractType 
	* @Description: TODO(添加合同类型) 
	* @param @param type
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 上午11:39:22 
	* @version V1.0
	 */
	@ApiOperation(value="添加合同分类",notes="添加合同类型")
	@PostMapping("/addContractType")
	public AjaxJson addContractType(String type,String guide){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.addContractType(type,guide));
	}
	
	/**
	 * 
	* @Title: contractTypes 
	* @Description: TODO(查询全部合同类型) 
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午12:49:13 
	* @version V1.0
	 */
	@ApiOperation(value="查询合同类型",notes="查询合同类型")
	@PostMapping("/contractTypes")
	public AjaxJson contractTypes(String guide){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.contractTypes1(guide));
	}
	
	/**
	 * 
	* @Title: contractTypes 
	* @Description: TODO(查询全部合同类型) 
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午12:49:13 
	* @version V1.0
	 */
	@ApiOperation(value="查询合同类型",notes="查询合同类型")
	@PostMapping("/contractTypesByName")
	public AjaxJson contractTypesByName(String name,String guide){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.contractTypes2(name, guide));
	}
	
	/**
	 * 
	* @Title: contractTypes 
	* @Description: TODO(查询全部合同类型) 
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午12:49:13 
	* @version V1.0
	 */
	@ApiOperation(value="查询合同类型",notes="查询合同类型")
	@PostMapping("/contractTypesPage")
	public AjaxJson contractTypes(Integer currentPage,Integer pageSize,String guide){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.contractTypes3(currentPage , pageSize,guide));
	}
	
	/**
	 * 
	* @Title: contractTypeCount 
	* @Description: TODO(查询合同类型数量) 
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午5:50:06 
	* @version V1.0
	 */
	@ApiOperation(value="查询合同类型总数",notes="查询合同类型总数")
	@PostMapping("/contractTypeCount")
	public AjaxJson contractTypeCount(String guide){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.contractTypeCount(guide));
	}
	
	/**
	 * 
	* @Title: editContractType 
	* @Description: TODO(编辑合同类型) 
	* @param @param id
	* @param @param type
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午12:49:32 
	* @version V1.0
	 */
	@ApiOperation(value="编辑合同类型",notes="编辑合同类型")
	@PostMapping("/editContractType")
	public AjaxJson editContractType(String id , String type){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.editContractType(id, type));
	}
	
	/**
	 * 
	* @Title: removeContractType 
	* @Description: TODO(删除合同类型) 
	* @param @param id
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午12:49:45 
	* @version V1.0
	 */
	@ApiOperation(value="删除合同类型",notes="删除合同类型")
	@PostMapping("/removeContractType")
	public AjaxJson removeContractType(String id){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.deleteContractType(id));
	}
	
	/**
	 * 
	* @Title: addContract 
	* @Description: TODO(添加合同信息) 
	* @param @param name
	* @param @param typeid
	* @param @param fileUrl
	* @param @param imgUrl
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午1:44:50 
	* @version V1.0
	 */
	@ApiOperation(value="上传合同",notes="上传合同")
	@PostMapping("/addContract")
	public AjaxJson addContract(String name , String typeid , String fileUrl, String imgUrl,String guide){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.addContract(name, typeid, fileUrl, imgUrl,guide));
	}
	
	/**
	 * 
	* @Title: findAllContract 
	* @Description: TODO(查询全部合同信息) 
	* @param @param name
	* @param @param typeid
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午3:23:17 
	* @version V1.0
	 */
	@ApiOperation(value="查询全部合同内容",notes="查询全部合同信息")
	@PostMapping("/findAllContract")
	public AjaxJson findAllContract(String name , String typeid , Integer currentPage , Integer pageSize,String guide){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.findAllContract(name, typeid, currentPage , pageSize,guide));
	}
	
	/**
	 * 
	* @Title: findContractInfo 
	* @Description: TODO(查询合同详情) 
	* @param @param id
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午3:25:26 
	* @version V1.0
	 */
	@ApiOperation(value="查询合同详情",notes="查询合同详情")
	@PostMapping("/findContractInfo")
	public AjaxJson findContractInfo(String id){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.findContractById(id));
	}

	/**
	 * 
	* @Title: editContract 
	* @Description: TODO(编辑合同信息) 
	* @param @param id
	* @param @param name
	* @param @param typeid
	* @param @param file
	* @param @param img
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午3:27:05 
	* @version V1.0
	 */
	@ApiOperation(value="编辑合同信息",notes="编辑合同信息")
	@PostMapping("/editContract")
	public AjaxJson editContract(String id , String name , String typeid , String file , String img){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.editContract(id, name, typeid, file, img));
	}
	
	/**
	 * 
	* @Title: removeContract 
	* @Description: TODO(删除合同信息) 
	* @param @param id
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午3:28:22 
	* @version V1.0
	 */
	@ApiOperation(value="删除合同",notes="删除合同")
	@PostMapping("/removeContract")
	public AjaxJson removeContract(String id){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.removeContract(id));
	}
	
	/**
	 * 
	* @Title: addContractDemand 
	* @Description: TODO(添加合同需求) 
	* @param @param type
	* @param @param name
	* @param @param email
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午4:49:57 
	* @version V1.0
	 */
	@ApiOperation(value="添加合同需求",notes="添加合同需求")
	@PostMapping("/addContractDemand")
	public AjaxJson addContractDemand(String type, String name ,String email){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.addContractDemand(type, name, email));
	}
	
	/**
	 * 
	* @Title: removeContractDemand 
	* @Description: TODO(删除合同需求) 
	* @param @param id
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午4:51:38 
	* @version V1.0
	 */
	@ApiOperation(value="删除合同需求",notes="删除合同需求")
	@PostMapping("/removeContractDemand")
	public AjaxJson removeContractDemand(String id){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.removeContractDemand(id));
	}
	
	/**
	 * 
	* @Title: findContracDemand 
	* @Description: TODO(查询合同需求信息) 
	* @param @param name
	* @param @param startDate
	* @param @param endDate
	* @param @return    入参
	* @return AjaxJson    返回类型
	* @author （ZhangXinYu） 
	* @throws
	* @date 2017年12月17日 下午4:53:34 
	* @version V1.0
	 */
	@ApiOperation(value="查询合同需求信息" ,notes="查询合同需求信息")
	@PostMapping("/findContractDemand")
	public AjaxJson findContracDemand(String name , String startDate , String endDate, Integer currentPage , Integer pageSize){
		AjaxJson ajaxJson=new AjaxJson();
		return ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.findContractDemand(name, startDate, endDate, currentPage, pageSize));
	}
	
	@ApiOperation(value="附件发送" , notes="附件发送")
	@PostMapping("/sendMail")
	public AjaxJson sendMail(String userId,String address ,String ids,String guide){
		AjaxJson ajaxJson=new AjaxJson();
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.sendMail(userId,address, ids,guide));
		}catch (Exception e) {
			e.printStackTrace();
			ajaxJson.setSuccess(false).setStatus(500).setData("邮件发送失败");
		}
		return ajaxJson;
	}
	
	@ApiOperation(value="合同模板下载",notes="合同模板下载")
	@GetMapping("/downloadFile")
	public void downloadFile(String userId,String id,HttpServletResponse response,String guide){
		operatorContractService.downloadFile(userId,id, response,guide);
	}
	
	@ApiOperation(value="合同模板下载计量统计",notes="合同模板下载计量统计")
	@PostMapping("/getAllContractDownloadCounts")
	public AjaxJson getAllContractDownloadCounts(String name,String typeId,Integer pageSize,Integer currentPage,String guide){
		AjaxJson ajaxJson=new AjaxJson();
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.getAllContractDownloadCounts(name, typeId, pageSize, currentPage,guide));
		}catch (Exception e) {
			e.printStackTrace();
		}
		return ajaxJson;
	}
	
	@ApiOperation(value="合同模板下载详情",notes="指定合同模板下载详情")
	@PostMapping("/getAllContractDownloadLogs")
	public AjaxJson getAllContractDownloads(String id,Integer pageSize,Integer currentPage,String guide){
		AjaxJson ajaxJson=new AjaxJson();
		try{
			ajaxJson.setSuccess(true).setStatus(200).setData(operatorContractService.getAllContractDownloadLogs(id, pageSize, currentPage,guide));
		}catch (Exception e) {
			e.printStackTrace();
		}
		return ajaxJson;
	}
}




